A virtual machine is a self-contained execution environment that behaves as if it is a separate computer and which can run its own operating system. Virtual machines provide Virtual CPUs (VCPUs) to clients or “guests”, and each VCPU runs on a dedicated physical CPU. A VCPU is a representation of a physical processor within a Virtual Machine. In conventional systems, the mapping between virtual and physical CPUs is static.
If multiple CPUs are available to a client or “guest”, the guest tasks are spread between the CPUs. This is preferably done such that the available resources are used in the most efficient way and computing time is decreased. This process is generally referred to as “load balancing”.
Conventional load balancing algorithms may be insufficient. Let us consider, for example, the sharing of a plurality of physical CPUs between dedicated real-time software and generic server software. Let us assume an UP (uniprocessor) execution environment (e.g. LINUX) running the real-time software on CPU 0, and an SMP (symmetric multiprocessing) execution environment (LINUX) running a server software on CPUs 0-3. In this example, CPU 0 is shared between the real-time software and the server software. The dedicated real-time has a higher scheduling priority. In this example, the SMP load balancer does not take into account the real-time activity on CPU 0. This may skew the SMP load balancing.
The present invention aims to address this and other problems of conventional load balancing. In particular, but not exclusively, the present invention is concerned with better balancing the load of physical CPUs in a computer system comprising physical and virtual CPUs.